<?php
/**
* RequestController
*/
class RequestController {
	/**
	 * Par�metros da solicita��o
	 * 
	 * @access private
	 */
	private $_params;
	
	/**
	 * Atributos transit�veis
	 * 
	 * @access private
	 */
	private $_attributes;
	
	/**
	 * Construtor
	 * 
	 * @access public
	 */
	public function __construct() {
		$this->_params = array_merge ( $_GET, $_POST );
		$this->_attributes = array ();
	}
	
	/**
	 * Retorna par�metro
	 * 
	 * @access public
	 */
	public function getParam($key) {
		if (isset ( $this->_params [$key] )) {
			return $this->_params [$key];
		}
		return null;
	}
	
	/**
	 * Retorna todos os par�metros
	 * 
	 * @access public
	 */
	public function getAllParams() {
		return $this->_params;
	}
	
	/**
	 * Retorna atributo
	 * 
	 * @access public
	 */
	public function getAttribute($key) {
		if (isset ( $this->_attributes [$key] )) {
			return $this->_attributes [$key];
		}
		return null;
	}
	
	/**
	 * Seta atributo
	 * 
	 * @access public
	 */
	public function setAttribute($key, $value) {
		if (is_null ( $key ) | empty ( $key ) | is_bool ( $key )) {
			throw new Exception ( 'A chave n�o deve ser do tipo v�zio, booleano ou nulo! ' . __METHOD__);
		}
		$this->_attributes [$key] = $value;
	}
	
	/**
	 * Retorna a sess�o
	 * 
	 * @access public
	 */
	public function getSession() {
		return SessionController::getInstance ();
	}
        
        /**
	 * Seta um atributo na sessão
	 *
	 * @access public
	 */
	public function setAppSession($key, $value) {
		if (is_null ( $key ) | empty ( $key ) | is_bool ( $key )) {
			throw new Exception ( 'A chave não deve ser do tipo vázio, booleano ou nulo! ' . __METHOD__);
		}
		$this->getSession()->setAttribute($key, $value);
	}
	
	/**
	 * Retorna um atributo da sessão
	 *
	 * @access public
	 */
	public function getAppSession($key) {
		return $this->getSession()->getAttribute($key);
	}
}
?>